package com.iwinding.ladygg.ui.act;


import android.Manifest;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.iwinding.ladygg.R;
import com.iwinding.ladygg.runtimepermissions.PermissionsManager;
import com.iwinding.ladygg.runtimepermissions.PermissionsResultAction;
import com.iwinding.ladygg.utils.ToastUtil;
import com.iwinding.ladygg.utils.URIUtils;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * @author spring sky<br>
 *         Email :vipa1888@163.com<br>
 *         QQ: 840950105<br>
 *         说明：主要用于选择文件操作
 */

public class SelectPicActivity extends Activity implements OnClickListener {

    /***
     * 使用照相机拍照获取图片
     */
    public static final int SELECT_PIC_BY_TACK_PHOTO = 1;
    /***
     * 使用相册中的图片
     */
    public static final int SELECT_PIC_BY_PICK_PHOTO = 2;

    /***
     * 从Intent获取图片路径的KEY
     */
    public static final String KEY_PHOTO_PATH = "photo_path";

    private static final String TAG = "SelectPicActivity";

    private LinearLayout dialogLayout;
    private Button takePhotoBtn, pickPhotoBtn, cancelBtn;

    /**
     * 获取到的图片路径
     */
    private String picPath;

    private Intent lastIntent;

    private Uri photoUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select_pic_dialog);
        initView();
    }

    /**
     * 初始化加载View
     */
    private void initView() {
        dialogLayout = (LinearLayout) findViewById(R.id.pop_layout);
        dialogLayout.setOnClickListener(this);
        takePhotoBtn = (Button) findViewById(R.id.btn_take_photo);
        takePhotoBtn.setOnClickListener(this);
        pickPhotoBtn = (Button) findViewById(R.id.btn_pick_photo);
        pickPhotoBtn.setOnClickListener(this);
        cancelBtn = (Button) findViewById(R.id.btn_cancel);
        cancelBtn.setOnClickListener(this);

        lastIntent = getIntent();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.pop_layout:
                finish();
                break;
            case R.id.btn_take_photo:
                takePhoto();
                break;
            case R.id.btn_pick_photo:
                pickPhoto();
                break;
            default:
                finish();
                break;
        }
    }

    /**
     * 拍照获取图片
     */
    private void takePhoto() {
        PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(SelectPicActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                new PermissionsResultAction() {
                    @Override
                    public void onGranted() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //执行拍照前，应该先判断SD卡是否存在
                                String SDState = Environment.getExternalStorageState();
                                if (SDState.equals(Environment.MEDIA_MOUNTED)) {
                                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE"
                                    /***
                                     * 需要说明一下，以下操作使用照相机拍照，拍照后的图片会存放在相册中的
                                     * 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图
                                     * 如果不实用ContentValues存放照片路径的话，拍照后获取的图片为缩略图不清晰
                                     */
                                    SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
                                    String filename = timeStampFormat.format(new Date());
                                    ContentValues values = new ContentValues();
                                    values.put(MediaStore.Images.Media.TITLE, filename);
                                    photoUri = SelectPicActivity.this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                                    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
                                    /**-----------------*/
                                    startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
                                } else {
                                    Toast.makeText(SelectPicActivity.this, "内存卡不存在", Toast.LENGTH_LONG).show();
                                }
                            }
                        });
                    }

                    @Override
                    public void onDenied(String permission) {
                        ToastUtil.openBaseToast(SelectPicActivity.this, permission, Toast.LENGTH_SHORT);
                    }
                });
    }

    /***
     * 从相册中取图片
     */
    private void pickPhoto() {
//		Intent intent = new Intent();
//		intent.setType("image/*");
//		intent.setAction(Intent.ACTION_GET_CONTENT);

        Intent intent = new Intent(
                Intent.ACTION_PICK,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        finish();
        return super.onTouchEvent(event);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            doPhoto(requestCode, data);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    /**
     * 选择图片后，获取图片的路径
     *
     * @param requestCode
     * @param data
     */
    private void doPhoto(int requestCode, Intent data) {
        if (requestCode == SELECT_PIC_BY_PICK_PHOTO)  //从相册取图片，有些手机有异常情况，请注意
        {
            if (data == null) {
                Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
                return;
            }
            photoUri = data.getData();
            if (photoUri == null) {
                Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
                return;
            }
        }
        /*String[] pojo = {MediaStore.Images.Media.DATA};
        @SuppressWarnings("deprecation")
		Cursor cursor = managedQuery(photoUri, pojo, null, null,null);   
		if(cursor != null )
		{
			int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
			cursor.moveToFirst();
			picPath = cursor.getString(columnIndex);
			cursor.close();
		}*/
        picPath = URIUtils.getImageAbsolutePath(this, photoUri);
        Log.i(TAG, "imagePath = " + picPath);
//		if(picPath != null && ( picPath.endsWith(".png") || picPath.endsWith(".PNG") ||picPath.endsWith(".jpg") ||picPath.endsWith(".JPG")  ))
//		{
        lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
        setResult(Activity.RESULT_OK, lastIntent);
        finish();
//		}else{
//			Toast.makeText(this, "选择图片文件不正确", Toast.LENGTH_LONG).show();
//		}
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == RESULT_OK){

        }
    }
}
